# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/17 09:49 
@Author  : ZhangShenao 
@File    : basic.py 
@Desc    : 使用cProfile进行性能测试

可以在代码中,通过cProfile.run('fib_seq(30)')执行性能测试

也可以在命令行直接运行: python3 -m cProfile basic.py

"""
import functools


def cached(f):
    """缓存装饰器"""
    cache = {}

    @functools.wraps(f)
    def wrapper(x):
        if x not in cache:
            cache[x] = f(x)
        return cache[x]

    return wrapper


@cached  # 使用缓存装饰器,缓存中间结果,减少重复计算
def fib(n: int) -> int:
    """斐波那契函数"""
    if n == 0 or n == 1:
        return n
    return fib(n - 1) + fib(n - 2)


def fib_seq(n: int) -> list[int]:
    """生成n项的斐波那契数列"""
    return [fib(i) for i in range(0, n + 1)]


if __name__ == '__main__':
    # 使用cProfile进行性能测试
    # cProfile.run('fib_seq(30)')

    print(fib_seq(30))
